給定一個 矩陣,回傳順時鐘從外往內走的路徑
找到邊界,L, R, Up, Down
第一遍:左至右,走到盡頭時,更新 up += 1
第二遍:上到下,更新 right -= 1
第三遍:先判斷 up <= down ,右到左,更新 down -= 1
第四遍:先判斷 left <= right,下到上,更新 left += 1
O(n)
O(n)
class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
res = []
up, down, left, right = 0, len(matrix)-1, 0, len(matrix[0]) - 1
while up <= down and left <= right:
# 左到右
for i in range(left, right+1):
res.append(matrix[up][i])
up += 1
# 上到下
for i in range(up, down + 1):
res.append(matrix[i][right])
right -= 1
if up <= down:
# 右到左
for i in range(right, left - 1, -1):
res.append(matrix[down][i])
down -= 1
if left <= right:
# 下到上
for i in range(down, up - 1, -1):
res.append(matrix[i][left])
left += 1
return res
在四邊形走的時候,走到第三與第四遍要記得判斷邊界,因為 up 與 right 有更新過,所以在走之前要先判斷 up <= down 與 left <= right 再繼續往下走